<?php

/**
 * 名称：CommonModel(sun在Model中添加了findPage方法，可以用链式方法得到page页面了，比下面的方法更加直观)
 * 描述：公共模型，提供了一些常用的数据操作方法，用M（）方法实例化的时候可以调用此类，获取一些常用的数据库操作,如：M('CommonModel:cms_article');
 * 作者：tony 时间：2013-08-20
 * 版本号：V1.0.0
 */
class CommonModel extends Model {

    /**
     * 根据主键id查找一条数据
     * @param int $id 主键ID
     * @param array $fields 查询的字段
     * @return array|false 成功返回查询的数据，失败返回false
     */
    public function getById($id, array $fields = array()) {
        $id = intval($id);
        if (empty($id)) {
            return false;
        }
        $where = array(
            $this->fields['_pk'] => $id
        );
        if (empty($fields)) {
            $fields = $this->fields;
            unset($fields['_autoinc']);
            unset($fields['_pk']);
        }
        if (!$data = $this->field($fields)->where($where)->select()) {
            return false;
        }
        return $data[0];
    }

    /**
     * 获取查询数据的分页信息
     * @param array $data 得到的数据
     * @param string $page 页码字符串
     * @param string $alias 表别名
     * @param array $where 查询的条件
     * @param array $field 查询的表字段（不传表示查询所有的字段）
     * @param array $join 联合其它表查询
     * @param array $order 排序
     * @param array $group Group by操作
     * @param array $having having操作
     * @param int $listRow 每页显示的数据条数
     * @return boolean 查询成功返回true，否则返回false
     */
    public function getPage(&$data, &$page, $alias = "", array $where = array(), array $field = array(), array $join = array(), array $order = array(), array $group = array(), array $having = array(), $listRow = 20) {
        import('ORG.Util.Page');
        $count = $this->where($where)->join($join)->group($group)->having($having)->count();
        C('LIST_ROW') && $listRow = C('LIST_ROW'); //配置文件中存在的话就读取配置文件
        $p = new Page($count, $listRow);
        if (empty($field)) {
            $field = $this->fields;
            unset($field['_autoinc']);
            unset($field['_pk']);
        }
        $data = $this->alias($alias)
                ->field($field)
                ->where($where)
                ->join($join)
                ->order($order)
                ->group($group)
                ->having($having)
                ->limit("$p->firstRow,$p->listRows")
                ->select();
        if (false === $data) {
            return false;
        } else {
            foreach ($_REQUEST as $key => $val) {
                if (!is_array($val)) {
                    $p->parameter .= "&$key=" . urlencode($val) . "&";
                }
            }
            $page = $p->show();
            return true;
        }
    }

}
